package br.com.sgpv2.service.dependentes;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import br.com.sgpv2.controler.NegocioExeception;
import br.com.sgpv2.entity.dependente.Dependente;
import br.com.sgpv2.entity.pessoa.Pessoa;
import br.com.sgpv2.hibernate.dependente.DependenteRepository;

/**
 * Classe de serviço de Dependente.
 */
@Service(value = "dependenteService")
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class DependenteServiceImpl implements DependenteService {

	DependenteRepository dependenteRepository;

	/**
	 * Configura o DAO de dependente.
	 */
	@Autowired
	public void setDependenteRepository(
			DependenteRepository dependenteRepository) {
		this.dependenteRepository = dependenteRepository;
	}

	/** {@inheritDoc} */
	@Override
	public void alterar(Dependente dependente) {
		dependenteRepository.alterar(dependente);
	}

	/** {@inheritDoc} */
	@Override
	public void saveOrUpdate(Dependente dependente) {
		dependenteRepository.saveOrUpdate(dependente);
	}

	/** {@inheritDoc} */
	@Override
	public Dependente buscar(Integer pk) throws NegocioExeception {
		return dependenteRepository.buscar(pk);
	}

	/** {@inheritDoc} */
	@Override
	public List<Dependente> listar() throws Exception {
		return dependenteRepository.listar();
	}

	/** {@inheritDoc} */
	@Override
	public void remover(Dependente dependente) throws Exception {
		dependenteRepository.excluir(dependente);
	}

	/** {@inheritDoc} */
	@Override
	public Dependente salvar(Dependente dependente) throws Exception {
		dependenteRepository.salvar(dependente);
		return dependente;
	}

	/** {@inheritDoc} */
	@Override
	public List<Dependente> consultarPorTitular(Pessoa pessoa)
			throws NegocioExeception {
		return dependenteRepository.consultarPorTitular(pessoa);
	}

}
